如何在从客户机(Java、Socket)接收特定消息时自动返回响应
如果我的客户给我发送消息“Hello mr server”,我基本上是想从我的服务器返回一个响应。但事实并非如此
这是我的密码:
public class Server {
public static final int PORT = 6666;
public static void main(String[] args) throws IOException {
new Server().runServer();
}
public void runServer() throws IOException {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("Server up and ready for connections.....");
while (true) {
Socket socket = serverSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //for fetching data
String str = br.readLine(); //for fetching data
System.out.println("Client Data:" + str + '\n');
String dataSendingToClient = "gg";
OutputStreamWriter os = new OutputStreamWriter(socket.getOutputStream()); //for sending data
PrintWriter out = new PrintWriter(os); //for sending data
out.println(dataSendingToClient);
os.flush();
if (br.equals("hey mr server")){
OutputStreamWriter os2 = new OutputStreamWriter(socket.getOutputStream()); //for sending data
PrintWriter out2 = new PrintWriter(os); //for sending data
out2.println("hey mr client");
os.flush();
}
}
}
}
# 1 楼答案
您正在使用
br.equals("hey mr server")
,它将始终返回false,因为br
不是字符串,而是一个BufferedReader相反,您应该使用已经定义的
str
变量str.equals("hey mr server")
还请注意,使用当前代码,服务器将只从客户端读取一条消息,然后再转到下一个连接
如果希望服务器从单个客户端读取更多消息,则需要循环,直到客户端发送断开连接消息/套接字关闭
如果有多个客户端试图连接,则需要对连接执行多线程处理
我建议使用一个类来封装连接细节,并使用堆栈来轮询客户端是否发送了数据
注意:将其视为粗略的伪代码